import request from "@/utils/request";
import { AxiosPromise, AxiosResponse } from "axios";
import { AgentPageVO } from "@/api/agent";

const ACCOUNT_BASE_URL = "/api/user";

class AccountAPI {
  /**
   * 获取当前登录账号信息
   *
   * @returns 登录账号昵称、头像信息，包括角色和权限
   */
  static getInfo() {
    return request<any, AccountInfo>({
      url: `${ACCOUNT_BASE_URL}/data`,
      method: "get",
    });
  }

  /**
   * 获取账号分页列表
   *
   * @param queryParams 查询参数
   */
  static getPage(queryParams: AccountPageQuery) {
    return request<any, PageResult<AccountPageVO[]>>({
      url: `${ACCOUNT_BASE_URL}`,
      method: "get",
      params: queryParams,
    });
  }

  /**
   * 获取账号表单详情
   *
   * @param AccountId 账号ID
   * @returns 账号表单详情
   */
  static getFormData(AccountId: number) {
    return request<any, AccountForm>({
      url: `${ACCOUNT_BASE_URL}/${AccountId}`,
      method: "get",
    });
  }
  /**
   * 校验账号是否注册过
   * @param queryParams
   */
  static checkUnique(queryParams: string, id: number) {
    return request<any, PageResult<AgentPageVO[]>>({
      url: `${ACCOUNT_BASE_URL}/check/${queryParams}`,
      method: "get",
      params: { id },
    });
  }

  /**
   * 校验手机号是否注册过
   * @param queryParams
   */
  static checkPhoneUnique(queryParams: string, id: number) {
    return request<any, PageResult<AgentPageVO[]>>({
      url: `${ACCOUNT_BASE_URL}/checkPhone/${queryParams}`,
      method: "get",
      params: { id },
    });
  }
  /**
   * 添加账号
   *
   * @param data 账号表单数据
   */
  static add(data: AccountForm) {
    return request({
      url: `${ACCOUNT_BASE_URL}`,
      method: "post",
      data: data,
    });
  }

  /**
   * 修改账号
   *
   * @param id 账号ID
   * @param data 账号表单数据
   */
  static update(id: number, data: AccountForm) {
    return request({
      url: `${ACCOUNT_BASE_URL}/${id}`,
      method: "put",
      data: data,
    });
  }

  /**
   * 修改账号密码
   *
   * @param id 账号ID
   * @param password 新密码
   */
  static resetPassword(id: number, password: string) {
    return request({
      url: `${ACCOUNT_BASE_URL}/reset/${id}`,
      method: "post",
      params: { password: password },
    });
  }

  /**
   * 批量删除账号，多个以英文逗号(,)分割
   *
   * @param ids 账号ID字符串，多个以英文逗号(,)分割
   */
  static deleteByIds(ids: string) {
    return request({
      url: `${ACCOUNT_BASE_URL}/${ids}`,
      method: "delete",
    });
  }

  /** 下载账号导入模板 */
  static downloadTemplate() {
    return request({
      url: `${ACCOUNT_BASE_URL}/template`,
      method: "get",
      responseType: "arraybuffer",
    });
  }

  /**
   * 导出账号
   *
   * @param queryParams 查询参数
   */
  static export(queryParams: AccountPageQuery) {
    return request({
      url: `${ACCOUNT_BASE_URL}/export`,
      method: "get",
      params: queryParams,
      responseType: "arraybuffer",
    });
  }

  /**
   * 导入账号
   *
   * @param deptId 部门ID
   * @param file 导入文件
   */
  static import(deptId: number, file: File) {
    const formData = new FormData();
    formData.append("file", file);
    return request({
      url: `${ACCOUNT_BASE_URL}/import`,
      method: "post",
      params: { deptId: deptId },
      data: formData,
      headers: {
        "Content-Type": "multipart/form-data",
      },
    });
  }

  /** 获取个人中心账号信息 */
  static getProfile() {
    return request<any, UserProfileVO>({
      url: `${ACCOUNT_BASE_URL}/profile`,
      method: "get",
    });
  }

  /** 修改个人中心账号信息 */
  static updateProfile(data: UserProfileForm) {
    return request({
      url: `${ACCOUNT_BASE_URL}/profile`,
      method: "put",
      data: data,
    });
  }

  /** 修改个人中心账号密码 */
  static changePassword(data: PasswordChangeForm) {
    return request({
      url: `${ACCOUNT_BASE_URL}/password`,
      method: "put",
      data: data,
    });
  }

  /**
   *   发送手机/邮箱验证码
   *
   * @param contact 联系方式  手机号/邮箱
   * @param contactType 联系方式类型 MOBILE:手机;EMAIL:邮箱
   */
  static sendVerificationCode(contact: string, contactType: string) {
    return request({
      url: `${ACCOUNT_BASE_URL}/send-verification-code`,
      method: "get",
      params: { contact: contact, contactType: contactType },
    });
  }

  /** 绑定个人中心账号手机 */
  static bindMobile(data: MobileBindingForm) {
    return request({
      url: `${ACCOUNT_BASE_URL}/mobile`,
      method: "put",
      data: data,
    });
  }

  /** 绑定个人中心账号邮箱 */
  static bindEmail(data: EmailBindingForm) {
    return request({
      url: `${ACCOUNT_BASE_URL}/email`,
      method: "put",
      data: data,
    });
  }

  /**
   *  获取账号下拉列表
   */
  static getOptions(): AxiosPromise<OptionType[]> {
    return request({
      url: `${ACCOUNT_BASE_URL}/options`,
      method: "get",
    });
  }
}

export default AccountAPI;

/** 登录账号信息 */
export interface AccountInfo {
  /** 账号ID */
  AccountId?: number;

  /** 账号名 */
  username?: string;

  /** 昵称 */
  nickname?: string;

  /** 头像URL */
  avatar?: string;

  /** 角色 */
  roles: string[];

  /** 权限 */
  perms: string[];
}

/**
 * 账号分页查询对象
 */
export interface AccountPageQuery extends PageQuery {
  /** 搜索关键字 */
  keywords?: string;
  /** 账号类型 */
  type?: number;
  /** 账号状态 */
  status?: number;

  /** 开始时间 */
  createTime?: [string, string];
}

/** 账号分页对象 */
export interface AccountPageVO {
  /** 账号头像URL */
  avatar?: string;
  /** 创建时间 */
  createTime?: Date;
  /** 性别 */
  genderLabel?: string;
  /** 账号ID */
  id?: number;
  /** 账号 */
  account?: string;
  /** 账号昵称 */
  nickName?: string;
  /** 角色名称，多个使用英文逗号(,)分割 */
  roleNames?: string;
  /** 账号状态(1:启用;0:禁用) */
  status?: number;
  /** 账号类型(1:平台账号;2:代理账号;3:机构账号) */
  type?: number;
}

/** 账号表单类型 */
export interface AccountForm {
  /** 账号头像 */
  avatar?: string;
  /** 性别 */
  gender?: number;
  /** 账号ID */
  id?: number;
  /** 手机号 */
  phone?: string;
  /** 昵称 */
  nickName?: string;
  /** 角色ID集合 */
  role?: number;
  /** 账号状态(1:正常;0:禁用) */
  status?: number;
  /** 账号名 */
  account?: string;
}

/** 个人中心账号信息 */
export interface AccountProfileVO {
  /** 账号ID */
  id?: number;

  /** 账号名 */
  username?: string;

  /** 昵称 */
  nickname?: string;

  /** 头像URL */
  avatar?: string;

  /** 性别 */
  gender?: number;

  /** 手机号 */
  mobile?: string;

  /** 邮箱 */
  email?: string;

  /** 部门名称 */
  deptName?: string;

  /** 角色名称，多个使用英文逗号(,)分割 */
  roleNames?: string;

  /** 创建时间 */
  createTime?: Date;
}

/** 个人中心账号信息表单 */
export interface AccountProfileForm {
  /** 账号ID */
  id?: number;

  /** 账号名 */
  username?: string;

  /** 昵称 */
  nickname?: string;

  /** 头像URL */
  avatar?: string;

  /** 性别 */
  gender?: number;

  /** 手机号 */
  mobile?: string;

  /** 邮箱 */
  email?: string;
}

/** 修改密码表单 */
export interface PasswordChangeForm {
  /** 原密码 */
  oldPassword?: string;
  /** 新密码 */
  newPassword?: string;
  /** 确认新密码 */
  confirmPassword?: string;
}

/** 修改手机表单 */
export interface MobileBindingForm {
  /** 手机号 */
  mobile?: string;
  /** 验证码 */
  code?: string;
}

/** 修改邮箱表单 */
export interface EmailBindingForm {
  /** 邮箱 */
  email?: string;
  /** 验证码 */
  code?: string;
}
